package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import util.TimeZoneUtil;
import util.enviaEmail;
import bean.funcionarioBean;
import conexao.Conexao;
import dao.funcionarioDao;

public class cadastrarUsuarioServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public cadastrarUsuarioServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");
		
		PrintWriter out = response.getWriter();
		
		Connection conn = null;
		try {
			conn = new Conexao().getConexao();
		} catch (SQLException e) {
			new enviaEmail().enviar(e);
			out.print("falhaConexao");
			return;
		}
		
		if (request.getParameter("cadastroNome") == "") {
			out.print("O nome não pode ser vazio.");
			return;
		}
		if (request.getParameter("selFuncao") == "") {
			out.print("Selecione uma função.");
			return;
		}
		if (request.getParameter("cadastroLogin").length() < 6) {
			out.print("O login tem que ter entre 6 e 10 caracteres.");
			return;
		}
		if (request.getParameter("cadastroSenha").length() < 6) {
			out.print("A senha tem que ter entre 6 e 10 caracteres.");
			return;
		}
		if (!request.getParameter("cadastroConfSenha").equals(request.getParameter("cadastroSenha"))) {
			out.print("A senha não confirma.");
			return;
		}	

		try {
			
			String nome = request.getParameter("cadastroNome");	
			Integer funcao = Integer.parseInt(request.getParameter("selFuncao"));	
			Double comissao = 0.0;
			if (request.getParameter("cadastroComissao") != "") {
				comissao = Double.parseDouble(request.getParameter("cadastroComissao"));	
			}	
			String senha = request.getParameter("cadastroSenha");
			if (new funcionarioDao().validaLogin(conn, request.getParameter("cadastroLogin"))){
				out.print("Este login já está cadastrado. Tente outro.");
				return;
			}
			String login = request.getParameter("cadastroLogin");
			
			funcionarioBean funcionario = new funcionarioBean();
			funcionario.setNome(nome);
			funcionario.setIdFuncao(funcao);
			funcionario.setIdEmpresa((Integer) request.getSession().getAttribute("idempresa"));
			funcionario.setComissao(comissao);
			funcionario.setLogin(login);
			funcionario.setSenha(senha);
			funcionario.setDataCadastro(new TimeZoneUtil().getHoraLocal());

			new funcionarioDao().inserir(conn, funcionario);
			conn.commit();

		} catch (Exception e) {
			try {
				conn.rollback();
			} catch (Exception ex) {
				new enviaEmail().enviar(ex);
				ex.printStackTrace();
			}
			new enviaEmail().enviar(e);
			throw new RuntimeException(e);
		} finally {
			try {
				conn.close();
			} catch (Exception ex) {
				new enviaEmail().enviar(ex);
				ex.printStackTrace();
			}
			
		}
		
	}
	
}
